import { WatchStopHandle } from "vue";


export enum MsgCodes {
    // 系统基础功能模块消息码定义
    //系统初始化
    //系统初始化
    SYSTEM_INITIALIZE = 10000,
    //系统模式设置
    SYSTEM_SET_MODE = 10001,
    //系统重置
    SYSTEM_RESET = 10003,
    //重置
    SYSTEM_QUIT = 10004,
    //鼠标跟随标签
    SYSTEM_LABEL = 10005,
    //系统提示框
    SYSTEM_MESSAGE = 10006,
    //系统警告
    SYSTEM_WARNING = 10007,
    //获取资源路径
    SYSTEM_GET_ASSET = 10008,



    //获取视角目录数据
    VIEW_DATA_MENU = 11000,
    //通过ID获取视角详细配置数据
    VIEW_DATA_CONFIG = 11001,
    //获取独立检查视角数据
    VIEW_CHECK_CONFIG = 11002,
    //切换视角
    VIEW_CHANGE = 11003,
    //获取独立检查视角数据
    VIEW_POINT_CONFIG = 11004,


    ///////////////////////////////////数据相关////////////////////////////////
    TOOL_DATA_CONFIG = 12000,//获取工具配置信息数据
    TOOL_DATA_ANIMATION = 12001,//获取工具初始化动画数据
    ///////////////////////////////////工具组装相关////////////////////////////
    TOOL_ASSEMBLE_COMBINATION = 12101,//工具组合
    TOOL_ASSEMBLE_DISASSEMBLE = 12102,//工具分解
    TOOL_ASSEMBLE_MOVE_CONTAINER = 12103,//移动至工具箱
    TOOL_ASSEMBLE_MOVE_CACHE_AREA = 12104,//移动至待组合区
    TOOL_ASSEMBLE_MOVE_USE_AREA = 12105,//移动至工具使用区
    TOOL_ASSEMBLE_FORCED_RECOVERY = 12106,//强制回收
    ///////////////////////////////////工具信息相关////////////////////////////
    TOOL_MOVE_SHIFT_IN = 12201,//移入工具
    TOOL_MOVE_SHIFT_OUT = 12202,//移出工具
    ///////////////////////////////////工具使用相关////////////////////////////
    TOOL_USE_START = 12301,//开始使用工具
    TOOL_USE_OVER = 12302,//工具使用完成
    TOOL_OPERATE = 12303,//工具操作
    TOOL_TAKE_UP = 12304,//工具拿起
    TOOL_PUTBACK = 12305,//工具放回使用区
    TOOL_PUTBACK_CONTAINER = 12306,//工具放回工具箱
    ///////////////////////////////////工具效果相关////////////////////////////
    TOOL_SHINE = 12401,//工具发光设置（发光）
    ///////////////////////////////////工具栏相关////////////////////////////
    TOOL_BAR_UPDATE = 12500,//工具栏信息更新
    TOOL_BAR_ARGUMENT = 12501,//工具参数设置
    TOOL_BAR_ICON = 12502,//工具图标
    TOOL_BAR_PUTBACK = 12503,//工具放回
    ///////////////////////////////////模拟操作////////////////////////////
    TOOL_SIMULATION_OPERATION = 12600,//模拟工具操作
    TOOL_SIMULATION_COMBINATION = 12601,//模拟组合操作
    TOOL_SIMULATION_DISASSEMBLE = 12602,//模拟分解操作
    TOOL_SIMULATION_TAKE_UP = 12603,//模拟拿起操作
    TOOL_SIMULATION_PUTBACK = 12604,//模拟放回使用区操作
    TOOL_SIMULATION_PUTBACK_CONTAINER = 12605,//模拟放回工具箱操作


    ///////////////////////////////////项目相关////////////////////////////////
    DISASSEMBLY_PROJECT_GET = 13000,//获取拆装项目数据（前端》业务）
    DISASSEMBLY_PROJECT_SET = 13001,//设置拆装项目（前端》业务）
    ///////////////////////////////////步骤相关////////////////////////////
    DISASSEMBLY_STEP_GET = 13100,//获取步骤信息（前端》业务）
    DISASSEMBLY_STEP_SELECT = 13101,//选中步骤（业务》前端）
    DISASSEMBLY_STEP_GOTO = 13102,//选中步骤（前端》业务）
    DISASSEMBLY_STEP_COMPLETE = 13103,//发送步骤完成（业务》前端）
    ///////////////////////////////////零件操作相关////////////////////////////
    DISASSEMBLY_PART_OPERATE = 13200,//零件双击(单击)
    DISASSEMBLY_PART_MOVE_DEVICE = 13201,//零件移动至设备(车辆、台架等)
    DISASSEMBLY_PART_MOVE_TABLE = 13202,//零件移动至零件桌、零件车等
    DISASSEMBLY_PART_STATE_SET = 13203,//零件目标状态设置
    DISASSEMBLY_PART_SHINE = 13204,//零件发光设置（发光）
    DISASSEMBLY_PART_SHIFT_IN = 13205,//移入零件
    DISASSEMBLY_PART_SHIFT_OUT = 13206,//移出零件
    DISASSEMBLY_PART_OPERATE_COMPLETE = 13207,//零件操作完成
    ///////////////////////////////////UI零件车操作相关////////////////////////////
    DISASSEMBLY_PARTCAR_PUT_IN = 13300,//放入零件车
    DISASSEMBLY_PARTCAR_PUT_OUT = 13301,//移出零件车
    DISASSEMBLY_PARTCAR_SELECT = 13302,//选中零件车零件
    ///////////////////////////////////初始化数据////////////////////////////
    DISASSEMBLY_DATA_PART_CONFIG = 13400,//初始化零件数据
    ///////////////////////////////////模拟操作////////////////////////////
    DISASSEMBLY_SIMULATION_PART_OPERATE = 13500,//模拟零件双击(单击)
    ///////////////////////////////////辅助功能////////////////////////////
    DISASSEMBLY_ASSIST_LAST = 13600,//上一步(辅助)
    DISASSEMBLY_ASSIST_NEXT = 13601,//下一步(辅助)
    DISASSEMBLY_ASSIST_AUTO = 13602,//自动(辅助)
    DISASSEMBLY_ASSIST_CONTINUE = 13603,//持续自动(辅助)


    ///////////////////////////////////标定工单相关////////////////////////////
    CALIBRATION_ORDER_GET = 14000, //获取工单数据
    CALIBRATION_ORDER_UPDATE = 14001,    //更新工单数据


    TASK_GET_MENU = 15000, //获取任务目录
    TASK_UPDATE_MENU = 15001, //更新任务状态


    APPRAISE_SUBMIT = 16000, //提交
    APPRAISE_GET = 16001,  //获取评价


    //////////////////////////////状态///////////////////////////////////
    DISASSEMBLY_STATE_CHANGE = 20100,//状态发生变化

    //////////////////////////////对象操作///////////////////////////////////
    DISASSEMBLY_OBJECT_CONFIG = 20200,//对象配置
    DISASSEMBLY_OBJECT_COLLIDER_CONFIG = 20201,//对象碰撞体配置
    DISASSEMBLY_OBJECT_OPERATE = 20202,//对象操作
    DISASSEMBLY_OBJECT_MENU_SHOW = 20203,//显示对象菜单操作
    DISASSEMBLY_OBJECT_MENU_OPERATE = 20204,//对象菜单操作
    DISASSEMBLY_OBJECT_EXAMINE = 20205,//对象检查
    DISASSEMBLY_OBJECT_EQUIP = 20206,//对象穿戴
    DISASSEMBLY_OBJECT_VEHICLE_CONTROLLER = 20207,//车辆控制
    // DISASSEMBLY_OBJECT_SHIFT_IN = 20203 ,//对象移入
    // DISASSEMBLY_OBJECT_SHIFT_OUT = 20204 ,//对象移出
    //器件断开
    //器件连接
    //连接适配器
    //断开适配器
    //连接电源
    //断开电源
    //显示端子信息
    //显示电路图
    //拉近视角
    //
    //////////////////////////////检测端子操作///////////////////////////////////
    DISASSEMBLY_TERMINAL_CONFIG = 20300,//端子配置
    DISASSEMBLY_TERMINAL_OPERATE = 20301,//端子操作
    DISASSEMBLY_TERMINAL_SHIFT_IN = 20302,//端子移入
    DISASSEMBLY_TERMINAL_SHIFT_OUT = 20303,//端子移出
    // DISASSEMBLY_TERMINAL_EVENT_CLICK = 20300 ,//端子点击事件
    // DISASSEMBLY_TERMINAL_EVENT_SHIFT_IN = 20300 ,//端子移入事件
    // DISASSEMBLY_TERMINAL_EVENT_SHIFT_OUT = 20300 ,//端子移出事件
    //////////////////////////////工单数据获取相关///////////////////////////////////
    DIAGNOSTIC_ORDER_GET = 20400, //获取工单
    DIAGNOSTIC_ORDER_GET_APPEARENCE = 20401, //获取故障现象列表
    DIAGNOSTIC_ORDER_ADD_APPEARENCE = 20402, //添加故障现象
    DIAGNOSTIC_ORDER_DELETE_APPEARENCE = 20403, //删除故障现象
    DIAGNOSTIC_ORDER_GET_REASON = 20404, //获取故障可能原因列表
    DIAGNOSTIC_ORDER_ADD_REASON = 20405, //添检修加故障可能原因
    DIAGNOSTIC_ORDER_DELETE_REASON = 20406, //删除故障可能原因
    DIAGNOSTIC_ORDER_GET_FAULT = 20407, //获取故障点列表
    DIAGNOSTIC_ORDER_ADD_FAULT = 20408, //添加故障点记录
    DIAGNOSTIC_ORDER_DELETE_FAULT = 20409, //删除故障点记录
    DIAGNOSTIC_ORDER_GET_THEORY = 20410, //获取故障机理分析列表
    DIAGNOSTIC_ORDER_ADD_THEORY = 20411, //添加故障机理分析
    DIAGNOSTIC_ORDER_DELETE_THEORY = 20412, //删除故障机理分析
    DIAGNOSTIC_ORDER_ADD_DETECTOR = 20413, //添加检测项
    DIAGNOSTIC_ORDER_DELETE_DETECTOR = 20414, //删除检测项
    DIAGNOSTIC_ORDER_DECISION_DETECTOR = 20415, //判定检测项
    DIAGNOSTIC_ORDER_ADD_PAGE = 20416, //添加页
    DIAGNOSTIC_ORDER_DELETE_PAGE = 20417, //删除页
    DIAGNOSTIC_ORDER_GOTO_PAGE = 20418, //跳转页
    DIAGNOSTIC_ORDER_PREV_PAGE = 20419, //上一页
    DIAGNOSTIC_ORDER_NEXT_PAGE = 20420, //下一页
    DIAGNOSTIC_ORDER_OPEN = 20421, //打开
    DIAGNOSTIC_ORDER_CLOSE = 20422, //关闭
    DIAGNOSTIC_ORDER_GET_BASE_CONFIG = 20423, //获取工单基本信息
    DIAGNOSTIC_ORDER_UPDATE_BASE_CONFIG = 20424, //更新工单基本信息
    DIAGNOSTIC_ORDER_SET_MODE = 20425, //设置工单模式
    //////////////////////////////万用表数据获取相关///////////////////////////////////
    DIAGNOSTIC_MULTIMETER_UPDATE = 20500,  //万用表更新
    DIAGNOSTIC_MULTIMETER_USE = 20501, //万用表使用操作
    DIAGNOSTIC_MULTIMETER_CLOSE = 20502,//万用表关闭操作
    DIAGNOSTIC_MULTIMETER_GEARS = 20503, //万用表换挡操作
    DIAGNOSTIC_MULTIMETER_ABUTMENT = 20504, //万用表表笔对接操作
    DIAGNOSTIC_MULTIMETER_REDPEN_SELECT = 20505,//万用表红表笔选中操作
    DIAGNOSTIC_MULTIMETER_BLACKPEN_SELECT = 20506,//万用表黑表笔选中操作
    DIAGNOSTIC_MULTIMETER_REDPEN_INSERTION = 20507,//万用表红表笔选中操作
    DIAGNOSTIC_MULTIMETER_BLACKPEN_INSERTION = 20508,//万用表黑表笔选中操作
    DIAGNOSTIC_MULTIMETER_REDPEN_PULLOUT = 20509,//万用表红表笔选中操作
    DIAGNOSTIC_MULTIMETER_BLACKPEN_PULLOUT = 20510,//万用表黑表笔选中操作
    DIAGNOSTIC_MULTIMETER_RECORD = 20511,//记录数据
    //////////////////////////////器件操作数据获取相关/////////////////////////////////
    DIAGNOSTIC_DEVICE_GET_OPERATE_MENU = 20600, //获取器件操作目录
    DIAGNOSTIC_DEVICE_OPERATE = 20601, //器件操作
    DIAGNOSTIC_DEVICE_SHOW_TERMINAL_INFO = 20602, //显示端子信息
    //////////////////////////////解码器数据获取相关///////////////////////////////////
    DIAGNOSTIC_DECODER_OPEN = 20700, //诊断仪器清除故障码
    DIAGNOSTIC_DECODER_CLOSE = 20701, //诊断仪器清除故障码
    DIAGNOSTIC_DECODER_READ_FAULT_CODE = 20702, //诊断仪器读取故障码
    DIAGNOSTIC_DECODER_CLEAR_FAULT_CODE = 20703, //诊断仪器清除故障码
    //////////////////////////////故障数据获取相关/////////////////////////////////////
    DIAGNOSTIC_FAULT_GET = 20800, //获取故障信息
    DIAGNOSTIC_FAULT_SET = 20801, //设置故障
    DIAGNOSTIC_FAULT_REPAIR = 20802, //修复故障
    DIAGNOSTIC_FAULT_GET_REPAIR = 20803, //获取修复故障数据
    DIAGNOSTIC_FAULT_REPAIR_OPEN = 20804, //打开修复故障界面
    DIAGNOSTIC_FAULT_REPAIR_CLOSE = 20805, //关闭修复故障界面
    //////////////////////////////现象数据获取相关///////////////////////////////////
    DIAGNOSTIC_APPEARENCE_UPDATE_RENDER = 20900, //Unity更新现象
    DIAGNOSTIC_APPEARENCE_UPDATE_VIEW = 20901, //UI更新现象
    //////////////////////////////举升机操作相关///////////////////////////////////
    LIFTER_ADJUSTMENT_ANGLE = 21000, //更新现象
    LIFTER_ADJUSTMENT_POSITION = 21001, //更新现象
    LIFTER_UP = 21002, //更新现象
    LIFTER_DOWN = 21003, //举升机下降
    //////////////////////////////车辆操作相关///////////////////////////////////
    // SCENE_RENDER_OPERATE = 21100 , //模型触发的场景操作
    // SCENE_VIEW_OPERATE = 21101 , //UI触发的场景操作

    //////////////////////////////数据测试///////////////////////////////////
    AUTOTEST_RESISTANCE = 22000, //电阻测试
    //////////////////////////////外设输入///////////////////////////////////
    INPUT_KEYBOARD_PRESS = 23000,
    INPUT_KEYBOARD_RELEASE = 23001,
    //////////////////////////////维修手册打开///////////////////////////////////
    INFORMATION_OPEN = 24000,
    INFORMATION_CLOSE = 24001,
    INFORMATION_LOAD_PATH = 24002,
    //////////////////////////////裁判评价表///////////////////////////////////
    DIAGNOSTIC_RATINGFORM_GET = 25000,
}



/**
 * 消息码
 */
export default class MessageCode {
    private static instance: MessageCode = new MessageCode();
    /**
     * 消息码
     */
    public static get Default(): MessageCode {
        return this.instance;
    }

    constructor() {
        window.addEventListener('unload', this.Dispose.bind(this));
    }

    Dispose() {
        window.removeEventListener('unload', this.Dispose);

        for (const watchStopHandle of this.watchStopHandles) {
            watchStopHandle();
        }
        this.watchStopHandles.clear();
    }


    public MsgCodesList = MsgCodes

    private watchStopHandles: Array<WatchStopHandle> = [];

    public async Awake(): Promise<void> {
    }

    public async Destroy(): Promise<void> {
    }
}